import datetime
import tornado.httpserver #tornado 服务
import tornado.httpclient #模拟用户的请求
import tornado.web
import tornado.ioloop
from tornado.options import define,options,parse_command_line


define('port',default=8080,help='如果命令行没有端口参数就用默认',type=int)

class IndexHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous  #这个装饰器用来保证我们的连接不会被关闭
    #装饰器在get 请求之前
    def get(self,*args,**kwargs):
        q = self.get_argument('q')
        #模拟用户的请求  创建一个客户端
        client = tornado.httpclient.AsyncHTTPClient()
        client.fetch("https://cn.bing.com/search?q=%s" % q,callback=self.on_response)
        #同步在这里需要等待 异步不需要等待 也就是说下面不会执行 回调函数
        # body = responses.body #返回的源代码
        now = datetime.datetime.utcnow()
        self.write(
        """
            <div style='text-align:center'>
                <div style='font-size:18px'>
                    %s
                </div>
                <div style='font-size:30px'>
                    %s
                </div>
            </div>
        """ % (q,now))
    def on_response(self,response):
        #异步返回结果 调用这个
        print(response.body) #这里response 就是 fetch 返回的结果
        self.write('回调执行')
        self.finish()

def make_app():
    return tornado.web.Application(handlers=[
        (r'/async/',IndexHandler)

    ],autoreload=True)

if __name__ == "__main__":
    parse_command_line()
    app = make_app()
    http_server = tornado.httpserver.HTTPServer(app)
    http_server.listen(options.port)
    tornado.ioloop.IOLoop.instance().start()
